package org.meetunexpectedly.schedul;

import org.meetunexpectedly.entity.vo.HotVideo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Queue;

/**
 * @Description:
 * @Author: pupil
 * @Date: 2024/09/10 下午 5:43
 */
public class TopK {

    // 大k
    private int k = 0;

    private Queue<HotVideo> queue;

    public TopK(int k,Queue<HotVideo> queue){
        this.k = k;
        this.queue = queue;
    }


    /**
     * 添加热门视频
     * @param hotVideo 热门视频
     */
    public void add(HotVideo hotVideo){
        if (queue.size() < k){
            // 队列没有符合大k的数量，直接入队
            queue.add(hotVideo);
        }else if (queue.peek().getHot() < hotVideo.getHot()){
            // 查看队头的视频热度有没有新热门视频热度高
            queue.poll(); // 出队
            queue.add(hotVideo);
        }
    }

    /**
     * 获取热度排行榜的视频
     * @return
     */
    public List<HotVideo> get(){
        ArrayList<HotVideo> list = new ArrayList<>(queue.size());
        while (!queue.isEmpty()){
            list.add(queue.poll());
        }
        // 进行链表反转，使热度最小的视频在第一位
        Collections.reverse(list);
        return list;
    }


}
